package com.hsnn.medstgmini.sys.service.impl;

import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.hsnn.medstgmini.sys.dao.SysRoleDao;
import com.hsnn.medstgmini.sys.model.SysPrivilege;
import com.hsnn.medstgmini.sys.model.SysRole;
import com.hsnn.medstgmini.sys.model.SysUser;
import com.hsnn.medstgmini.sys.service.SysRoleManager;
import com.hsnn.medstgmini.util.Pagination;

/**
 * @category 角色
 * @author 蔡春龙
 * @date 2015年6月12日
 */
@Service
public class SysRoleManagerImpl implements SysRoleManager {

	@Autowired
	private SysRoleDao roleDao;

	/**
	 * @category 查询用户所属角色
	 * @date 2015年6月14日
	 * @param user
	 * @return
	 */
	public List<SysRole> getRoleListByUser(SysUser user) {
		return roleDao.getRoleListByUser(user);
	}

	/**
	 * @category 中心查询角色管理列表
	 * @date 2015年6月14日
	 * @param page
	 * @param role
	 * @return
	 */
	public List<SysRole> getZxRoleList(Pagination page, SysRole role) {
		return roleDao.getZxRoleList(page, role);
	}

	/**
	 * @category 启用|停用
	 * @param hospInfo
	 */
	@Transactional
	public void changeStatus(SysRole role) {
		roleDao.changeStatus(role);
	}

	/**
	 * @category 批量(启用|停用)
	 * @param list
	 */
	@Transactional
	public void batchChangeStatus(List<SysRole> list) {
		roleDao.batchChangeStatus(list);
	}

	/**
	 * @category 启用|停用
	 * @param hospInfo
	 */
	@Transactional
	public void subChangeStatus(SysRole role) {
		roleDao.subChangeStatus(role);
	}

	/**
	 * @category 批量(启用|停用)
	 * @param list
	 */
	@Transactional
	public void subBatchChangeStatus(List<SysRole> list) {
		roleDao.subBatchChangeStatus(list);
	}

	/**
	 * @category 根据id查询角色信息
	 * @date 2015年6月14日
	 * @param id
	 * @return
	 */
	public SysRole getRoleById(String id) {
		return roleDao.getRoleById(id);
	}

	/**
	 * @category 中心保存角色信息
	 * @date 2015年6月14日
	 * @param role
	 */
	@Transactional
	public void zxSaveRole(SysRole role, List<SysPrivilege> list) {
		roleDao.zxSaveRole(role, list);
	}
	
	/**
	 * @category 中心保存子角色信息
	 * @author 韩守松
	 * @date   2015年10月16日
	 * @param  @param role
	 */
	@Transactional
	public void zxSaveRole(SysRole role) {
		roleDao.zxSaveRole(role);
		roleDao.writeRoleLog(role.getId());
	}

	/**
	 * @category 查询父级角色列表
	 * @date 2015年6月15日
	 * @param exceptRoleId为需要排除的id
	 * @return
	 */
	public List<SysRole> getZxFatherRoleList(String... exceptRoleId) {
		return roleDao.getZxFatherRoleList(exceptRoleId);
	}

	/**
	 * @category 医疗机构、生产企业、配送企业管理员查询公共子角色和自定义子角色管理列表
	 * @date 2015年6月16日
	 * @param page翻页
	 * @param role当前管理员角色
	 * @param userId当前管理员id
	 * @return
	 */
	public List<SysRole> getSubRoleList(Pagination page, SysRole role,
			SysRole editRole, String userId) {
		return roleDao.getSubRoleList(page, role, editRole, userId);
	}

	@Override
	public Pagination getSubRoleList(Pagination page,boolean isLoaded){
		page = roleDao.getSubRoleList(page);
		isLoaded = false;
		return page;
	}
	
	/**
	 * @category 中心查询角色管理列表
	 * @date 2015年6月14日
	 * @param role
	 * @return
	 */
	public List<SysRole> getZxRoleList() {
		return roleDao.getZxRoleList();
	}
	
	/**
	 * @category 中心、医疗机构、生产企业、配送企业查询子角色列表
	 * @date 2015年6月14日
	 * @param role
	 * @return
	 */
	public List<Object> getSubRoleListByType(String roleId,String orgId) {
		return roleDao.getSubRoleListByType(roleId,orgId);
	}

	/**
	 * @category 根据机构id及主账户查询父级id
	 * @author 韩守松
	 * @date   2015年10月16日
	 * @param  @return
	 */
	public List<Object[]> getFatherIdList(String roleId,String boundId) {
		return roleDao.getFatherIdList(roleId,boundId);
	}
	
	/**
	 * @category 根据主账户id获取主角色id
	 * @author 韩守松
	 * @date   2015年10月19日
	 * @param  @param userRootId
	 * @param  @return
	 */
	public String getUserRoleById(String userRootId) {
		return roleDao.getUserRoleById(userRootId);
	}
	
	/**
	 * @category 根据父级角色id更新其子角色数据（status）
	 * @author 韩守松
	 * @date   2015年10月21日
	 * @param  @param pid
	 * @param  @param level
	 */
	public void updateByPid(String id,Integer level) {
		roleDao.updateByPid(id,level);
	}

 
	@Override
	public List<SysRole> getSubRoleList(SysUser user) {
		return roleDao.getSubRoleList(user);
	}
	
	public void addRole(SysRole role){
		role.setId(UUID.randomUUID().toString());
		role.setPid("0");
		role.setMain(1);
		role.setType(0);
		role.setLevel(1);
		role.setSort(1);
		roleDao.addRole(role);
	}
	
	public void eidtRole(SysRole role){
		SysRole sysrole = getRoleById(role.getId());
		if (null != sysrole){
			sysrole.setName(role.getName());
			sysrole.setRemark(role.getRemark());
			roleDao.eidtRole(sysrole);
		}
	}
	public void deleteRole(String id){
		SysRole sysrole = getRoleById(id);
		roleDao.deleteRole(sysrole);
	}
	public List getUserRoleList(String userId){
		return roleDao.getUserRoleList(userId);
	}
}